package chapter05

/**
 * Created with IntelliJ IDEA.
 * ClassName: Test04_Simplify
 * Package: chapter05
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 *          Date: 2023-06-19
 *          Time: 15:10
 */

object Test04_Simplify {
  //函数至简原则
  def main(args: Array[String]): Unit = {
    //正常 网站的函数调用
    def f0(name: String): String = {
      return name
    }
    println(f0("harden"))

    //1.return 可以省略，Scala 会使用函数体的最后一行代码作为返回值
    def f1(name: String): String = {
      name
    }
    println(f1("1.return 可以省略"))

    //2.如果函数体只有一行代码，可以省略花括号
    def f2(name: String): String = name
    println(f2("2.函数体只有一行 可以省略花括号"))

    //3.返回值类型如果能够推断出来，那么可以省略（:和返回值类型一起省略）
    //就相当于数学上的函数 F(x) = x
    def f3(name: String) = name
    println(f3("3.能推段什么返回类型 都可以不用写"))

    //4.如果有return 则不能省略返回值
    def f4(name: String): String = {
      return name
    }
    println(f4("4.省了返回值就不能写return"))

    //5.如果函数明确声明 unit，那么即使函数体中使用 return 关键字也不起作用
    def f5(name: String): Unit = {
      return name
    }
    println(f5("5.如果返回值是Unit那么return指定的返回内容也没用 最后也是一个()"))

    //6.Scala 如果期望是无返回值类型，可以省略等号
    def f6(name: String) {
      println(name)
      "你好iiiiiiiiiiiiiiiiiiiiiiiiiiii"
    }
    println(f6("确定没有返回值 可以不写Unit和= 最后都会返回一个()"))

    //7.如果函数无参，但是声明了参数列表，那么调用时，小括号，可加可不加
    def f7():Unit = {
      println("省略小括号")
    }
    f7()
    //省略也是可以正常调用
    f7

    //8.如果函数没有参数列表，那么小括号可以省略，调用时小括号必须省略
    def f8:Unit = {
      println("直接没括号")
    }
    //没有参数列表 调用的适合也不能加小括号
    f8

    //这就是传说中的lambda表达式 匿名函数
    //9.如果不关心名称，只关心逻辑处理，那么函数名（def）可以省略
    (name:String) => {println(name)}

  }
}
